import os
import logging
import logging.config
from pathlib import Path

from readlater.utils import get_project_root


def setup_logging() -> logging.Logger:
    """
    配置日志系统

    读取logging.conf配置文件，并初始化日志系统。
    如果配置文件不存在，则使用默认配置。

    Returns:
        logging.Logger: 配置好的根日志记录器
    """
    # 确保logs目录存在
    log_dir = os.path.join(get_project_root(), 'logs')
    Path(log_dir).mkdir(exist_ok=True)

    # 配置文件路径
    config_path = os.path.join(get_project_root(), 'config', 'logging.conf')

    try:
        # 读取配置文件
        logging.config.fileConfig(config_path)
        logger = logging.getLogger()
        logger.info(f"日志系统已从 {config_path} 加载配置")
        return logger
    except FileNotFoundError:
        # 如果配置文件不存在，使用默认配置
        logging.basicConfig(
            level=logging.INFO,
            format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
            handlers=[
                logging.FileHandler(os.path.join(log_dir, 'app.log')),
                logging.StreamHandler()
            ]
        )
        logger = logging.getLogger()
        logger.warning(f"配置文件 {config_path} 不存在，使用默认配置")
        return logger


def get_logger(name: str = None) -> logging.Logger:
    """
    获取指定名称的日志记录器

    如果日志系统尚未初始化，则先初始化。

    Args:
        name: 日志记录器名称

    Returns:
        logging.Logger: 日志记录器
    """
    # 检查是否已经初始化日志系统
    if not logging.getLogger().handlers:
        setup_logging()

    if name:
        return logging.getLogger(name)
    else:
        return logging.getLogger()


# 初始化日志系统
logger = setup_logging()